package com.yixinsoft.basic.service.base;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yixinsoft.basic.mapper.base.MyMapper;

/**
 * Created by hqy on 2016/06/03.
 */
@Service
public abstract class BaseService<T> {

	@Autowired
    protected MyMapper<T> mapper;

    public MyMapper<T> getMapper() {
        return mapper;
    }

    /**
	 * 根据主键ID查询数据
	 * @param id
	 * @return
	 */
	public T queryById(Long id) {
		return getMapper().selectByPrimaryKey(id);
	}
	
	/**
	 * 查询集合
	 * @param t
	 * @return
	 */
	public List<T> queryList(T t) {
		return getMapper().select(t);
	}
	
	/**
	 * 分页查询
	 * @param t
	 * @param page
	 * @param rows
	 * @return
	 */
	public PageInfo<T> queryListPage(T t, Integer page, Integer rows) {
		//设置分页参数
		PageHelper.startPage(page, rows);
		//查询
		//getMapper().select(t);
		List<T> list = this.queryList(t);
		
		return new PageInfo<T>(list); 
	}
	
	/**
	 * 查询数量
	 * @param t
	 * @return
	 */
	public Integer queryCount(T t) {
		return this.getMapper().selectCount(t);
	}
	
	/**
	 * 新增数据
	 * @param t
	 * @return 受影响数据行数
	 */
	public Integer save(T t) {
		return this.getMapper().insert(t);
	}
	
	/**
	 * 批量插入
	 * @param recordList
	 * @return
	 */
	public Integer saveList(List<T> recordList) {
		return this.getMapper().insertList(recordList);
	}
	
	/**
	 * 新增数据，不为null作为参数插入
	 * @param t
	 * @return 受影响数据行数
	 */
	public Integer saveSelective(T t) {
		return this.getMapper().insertSelective(t);
	}
	
	/**
	 * 更新数据
	 * @param t
	 * @return 受影响数据行数
	 */
	public Integer update(T t) {
		return this.getMapper().updateByPrimaryKey(t);
	}
	
	/**
	 * 更新数据，不为null作为参数插入
	 * @param t
	 * @return 受影响数据行数
	 */
	public Integer updateSelective(T t) {
		return this.getMapper().updateByPrimaryKeySelective(t);
	}
	
	/**
	 * 删除
	 * @param id
	 * @return
	 */
	public Integer deleteById(Long id) {
		return this.getMapper().deleteByPrimaryKey(id);
	}
	
	/**
	 * 批量删除
	 * @param ids
	 * @return
	 */
	public Integer deleteByIds(Long[] ids) {
		return this.getMapper().deleteByIds(ids);
	}
}
